﻿using System;
using System.Linq;
using System.ComponentModel;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using DbTaglio.SvcLayer;
using DbTaglio.SvcLayer.DbTaglioService;

namespace Gucci.DbTaglio.Site.Wp.Concerie_dbtWp
{
    [ToolboxItem(false)]
    public partial class Concerie_dbtWp : System.Web.UI.WebControls.WebParts.WebPart
    {
        
        string _idargs = "",  _descrizione = "", _codice = "", _codMateriale = "", _spUserName = "";
        DBTWinLogin _loginUserData = null;
        SPUser _spUser = null;
        bool _isAbilitatoAlConsumo = false, _isAdmin = false;

        # region LOGIN - DATI UTENTE

        DBTManager _manager = null;

        private string getSPuser()
        {
            _spUser = SPContext.Current.Web.CurrentUser;

            var arr = _spUser.Name.Split(new[] { "\\" }, StringSplitOptions.RemoveEmptyEntries);
            if (arr != null && arr.Length > 1)
                _spUserName = arr[1];

            return _spUserName;
        }

        #endregion

        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            InitializeControl();
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            _manager = new DBTManager(getSPuser());
            var result = _manager.EnsureLogin(HiddenCodiceFornitore.Value, HiddenIsAdmin.Value);

            if (result.HaErrori)
            {
                LabelErrori.Text = result.Eccezione.Message;
                return;
            }


            if (!Page.IsPostBack)
            {
                try
                {
                    loadDati();
                }
                catch (Exception ex)
                {
                    LabelErrori.Text = ex.Message;
                }

            }            
        }

     

        private void loadDati()
        {
            var filtroConceria = new ConceriaSearchModel() { CodiceFornitore = _manager.CodFornitore };
            var result =  _manager.ProxyGetWcf.getConcerie(filtroConceria);

            if(result.HaErrori)
            {
                LabelErrori.Text = result.Eccezione.Message;
            }
            else
            { 
                ListView1.DataSource = null;
                ListView1.DataSource = result.Dati;
                ListView1.DataBind();
                
                _manager.setDropDownSingleVal<Terzista>(
                     new RetData<Terzista>(_manager.DatiUtenteLogin.Dati.DatiFornitore), DropFind_Fornitore,
                    _manager.DatiUtenteLogin.Dati.DatiFornitore.RagioneSocialeTerzista,
                    _manager.DatiUtenteLogin.Dati.DatiFornitore.CodiceTerzista, LabelErrori);

                _manager.setDropDownSingleVal<Terzista>(
                     new RetData<Terzista>(_manager.DatiUtenteLogin.Dati.DatiFornitore), DropNew_Fornitore,
                    _manager.DatiUtenteLogin.Dati.DatiFornitore.RagioneSocialeTerzista,
                    _manager.DatiUtenteLogin.Dati.DatiFornitore.CodiceTerzista, LabelErrori);

            }
        }

        protected void ListView1_SelectedIndexChanged(object sender, EventArgs e)
        {
            

        }

        protected void Azioni_Click(object sender, ImageClickEventArgs e)
        {
            var btn = (ImageButton)sender;
            var azione = btn.CommandName;
            
            switch (azione)
            {
                case "New":
                    AddNewItem();
                    break;
                case "Save":
                    _idargs = HiddenNewId.Value;
                    updateItem(false);
                    break;
                case "Mod":
                    _idargs = btn.CommandArgument; //idConceria
                    prelevaedEsponiDatiPerModifica();
                    break;
                case "Del":
                    updateItem(true);
                    break;
                case "Ret":
                    setInModifica(false);
                    break;
                case "Find":
                    getDatiForm();
                    break;
                case "Ref":
                    loadDati();
                    break;
                default:
                    break;
            }

           
        }

        private void AddNewItem()
        {
            setInModifica(true);

            TextNew_Codice.Text = "";
            TextNew_Nome.Text = "";

            _idargs = "";
             HiddenNewId.Value = "";

        }

        private void updateItem(bool pDelete)
        {
            MetSet wcf = new MetSet(null,null);

            if( string.IsNullOrEmpty( TextNew_Nome.Text) )
            {
                LabelErrori.Text = "Inserire il Nome Conceria ";
                return ;
            }
            if (string.IsNullOrEmpty(TextNew_Codice.Text))
            {
                LabelErrori.Text = "Inserire il Codice Conceria ";
                return ;
            }

            if (DropNew_Fornitore.SelectedValue == null || 
                DropNew_Fornitore.SelectedValue == "-1")
            {
                LabelErrori.Text = "Scegliere un fornitore ";
                return;
            }

             try
             {
                 int id = 0;
                 int.TryParse(_idargs, out id);

                 // Conceria item
                 Conceria item = new Conceria();                 
                 item.CodiceConceria = TextNew_Codice.Text;
                 item.DescrizioneConceria = TextNew_Nome.Text;
                 item.IdConceria =  id;
                 item.CodiceFornitore = _manager.CodFornitore ;
                 item.IsDeleted = pDelete;


                 //AZIONE
                 var result = wcf.updateConcerie(item, false);
                 //RESULT
                 if (result.HaErrori)
                     LabelErrori.Text = "Errore : Dati non inseriti\r\n " + result.Eccezione.Message  ;
                 else
                     LabelErrori.Text = string.Format("OK {0}  - {1}" , pDelete ? "Cancellazione eseguita ": "Dati inseriti" , 
                         DateTime.Now.ToShortTimeString() );

             }
             catch (Exception ex)
             {
                 LabelErrori.Text = "Errore : " + ex.Message;
             }



        }

        private void getDatiForm()
        {
            _codice = TextFInd_Codice.Text.Trim() ;
            _descrizione = TextFind_Nome.Text.Trim();

            prelevaedEsponiDatiPerModifica();

        }

        //preleva tutti i dati e li espone per la modifica
        // necessita di _IDArgs
        private void prelevaedEsponiDatiPerModifica()
        {
            //non metere sotto !!
            setInModifica(true);

            Conceria singleRes = null;

           try
            {
                //preleva i  dati ricavandoli da id o da ragsoc e li espone per la modifica
                var result = findSingleItem();

                if (result.HaErrori)
                {
                    LabelErrori.Text = "Errore : \r\n" + result.Eccezione.Message;
                }
                else if (result.IsNull)
                {
                    LabelErrori.Text = "Nessun dato trovato !";
                }
                else
                {
                    _codice = result.Dati.CodiceConceria;
                    _idargs = result.Dati.IdConceria.ToString();
                    _descrizione = result.Dati.DescrizioneConceria;

                    TextNew_Codice.Text = _codice;
                    TextNew_Nome.Text = result.Dati.DescrizioneConceria;
                    HiddenNewId.Value = _idargs;
                }
            }
            catch (Exception ex)
            {
                LabelErrori.Text = ex.Message;
            }


        }//fM

        private RetData<Conceria> findSingleItem()
        {
            int id = 0;
            int.TryParse(_idargs, out id);

            var res = _manager.ProxyGetWcf.getConcerie(new ConceriaSearchModel() 
             { CodiceFornitore = _manager.CodFornitore, IdConceria = id, 
                 CodiceConceria = _codice,  DescrizioneConceria = _descrizione });

            if (res.HaErrori)
            {
                LabelErrori.Text = "Errore nel prelievo Concerie";
                return new RetData<Conceria>(res.Eccezione);
            }

            return new RetData<Conceria>(res.Dati.FirstOrDefault());

        }//fM


        private void setInModifica(bool pMod)
        {
            MultiView1.SetActiveView( pMod ? View2 : View1);
            butSave.Enabled = pMod;
            butDel.Enabled = pMod;

            if(pMod)
                LabelErrori.Text = "";

        }
                
        protected void DataPagerProducts_PreRender(object sender, EventArgs e)
        {
          
        }
        
        protected void ListView1_PagePropertiesChanging(object sender, PagePropertiesChangingEventArgs e)
        {
            DataPager1.SetPageProperties(e.StartRowIndex, e.MaximumRows, false);
            loadDati();
        }

    }//fC
}
